home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 271_02 / inpath.c < prev    next >
Text File  |  1987-08-10  |  4KB  |  119 lines

  1. /*
  2. **                INPATH UTILITY
  3. ** This is a program similar to many "filefind" programs, except that
  4. ** it works like the UNIX "whereis" command.  The command line argument
  5. ** (only one, please) is taken to be the name of an executable
  6. ** program, and is searched under extensions .BAT, .COM, and .EXE
  7. ** for the first occurance of the program.  The search starts
  8. ** in the current directory, and if not found, procedes using the
  9. ** PATH environment variable (if there is one).  The program reports the
  10. ** first occurance of the specified file, just as it would be found
  11. ** by DOS if executed.
  12. **
  13. ** The input filename need not contain an extension, since the
  14. ** extension is discarded anyway.
  15. **
  16. ** Version 1.04  for Turbo-C
  17. ** 8-12-87 A
  18. **
  19. ** ======== COPYRIGHT 1987 BY STEVEN E. MARGISON ==============
  20. **
  21. **
  22. **   As distributed, this program requires (for compilation):
  23. **     "Steve's Turbo-C Library" version 1.30 or later
  24. **   which may be obtained without registration from many Bulletin
  25. **   Board Systems including:
  26. **      Compuserve IBMSW
  27. **      Cul-De-Sac (Holliston, MA.)
  28. **      GEnie
  29. **   and software library houses including:
  30. **      Public (Software) Library (Houston, TX.)
  31. **
  32. **   or by registration:
  33. **      $10 for Docs, Small Model Library
  34. **      $25 for Docs, C, S, M, L, H libraries, and complete library source
  35. **              in C and Assembler
  36. **     Steven E. Margison
  37. **     124 Sixth Street
  38. **     Downers Grove, IL, 60515
  39. **
  40. */
  41.  
  42. #include <stdio.h>
  43. #include <smdefs.h>
  44.  
  45. char paths[256],
  46.      fullname[100],
  47.      dirname[100],
  48.      batname[14],
  49.      comname[14],
  50.      exename[14],
  51.      fname[14];
  52. int current;
  53.  
  54. main(argc, argv)
  55. int argc;
  56. char *argv[];
  57. {
  58.    int i, j, k;
  59.    char c;
  60.    if(argc isnot 2) usage();
  61.    strcpy(fname, argv[1]);   /* copy argument to fname */
  62.    newext(fname, batname, "BAT");   /* make fname.bat */
  63.    newext(fname, comname, "COM");   /* make fname.com */
  64.    newext(fname, exename, "EXE");   /* make fname.exe */
  65.    dirname[0] = NULL;
  66.    current = YES;
  67.    findpgm();
  68.    current = NO;
  69.    if((j = getpath(paths)) is 0) notfound();
  70.    k = 0;
  71.    while(j > 0) {
  72.       i = 0;
  73.       while(paths[k] isnot NULL) {
  74.       c = paths[k];      /* save for slash check */
  75.          dirname[i++] = paths[k++];
  76.          --j;
  77.          }
  78.       if (c isnot '\\') dirname[i++] = '\\';
  79.       dirname[i] = NULL;
  80.       ++k;      /* position to next charcter in paths[] */
  81.       --j;
  82.       findpgm();
  83.       }
  84.    notfound();
  85.    }
  86.  
  87. findpgm() {
  88.    FILE *fd;
  89.    strcpy(fullname, dirname);   /* test for .com file */
  90.    strcat(fullname, comname);
  91.    if((fd = fopen(fullname, "r")) isnot NULL) goto found;
  92.    strcpy(fullname, dirname);
  93.    strcat(fullname, exename);   /* test for .exe file */
  94.    if((fd = fopen(fullname, "r")) isnot NULL) goto found;
  95.    strcpy(fullname, dirname);
  96.    strcat(fullname, batname);   /* test for .bat file */
  97.    if((fd = fopen(fullname, "r")) isnot NULL) goto found;
  98.    return(NO);         /* file not found */
  99.  
  100.    found:
  101.    if(current) puts("File found in current directory");
  102.    fputs(fullname, stdout);
  103.    fputc('\n', stdout);
  104.    fclose(fd);
  105.    exit(0);
  106.    return(NO);     /* to eliminate a compiler warning */
  107.    }
  108.  
  109. notfound() {
  110.    error("File not found in PATH");
  111.    }
  112.  
  113. usage() {
  114.    fputs("INPATH Version 1.04\n", stderr);
  115.    fputs("Copyright 1987, Steven E. Margison\n", stderr);
  116.    error("usage:  inpath <filename>");
  117.    }
  118.  
  119.